package com.service;


import com.qqcommon.Message;
import com.qqcommon.MessageType;

import java.io.FileOutputStream;
import java.io.ObjectInputStream;
import java.net.Socket;

/**
 *
 */
public class ClientConnectServerThread extends Thread{
    //该线程持有socket
    private Socket socket;

    //构造器:可以接受一个Socket对象
    public  ClientConnectServerThread(Socket socket){
        this.socket=socket;
    }

    //方便得到Socket
    public Socket getSocket() {
        return socket;
    }

    @Override
    public void run() {
        //因为Thread需要在后台和服务器保持通信,所以用while循环
        while(true){
            try {
             //   System.out.println("客户端线程,等待读取从服务端发来的消息");
                ObjectInputStream ois=new ObjectInputStream(socket.getInputStream());
                //如果服务器没有发送信息,Thread会阻塞在这
                Message message=(Message) ois.readObject();

                //判断消息类型,做对应业务
                //如果为返回在线用户列表
                if(message.getMesType().equals(MessageType.MESSAGE_RET_ONLINE_FRIEND)){
                    //取出用户信息,并显示
                    String onlineUser[]=message.getContent().split(" ");
                    System.out.println("\n========当前在线用户列表=========");
                    for(int i=0;i<onlineUser.length;i++){
                        System.out.println("用户:"+onlineUser[i]);
                    }
                } else if (message.getMesType().equals(MessageType.MESSAGE_COMM_MES)) {
                    //收到私聊消息
                    System.out.println("\n"+message.getSender()+"\t对你说: "+message.getContent()+"\t"+message.getSend_time());

                } else if (message.getMesType().equals(MessageType.MESSAGE_TO_ALL_MES)) {
                    //接收群发消息
                    System.out.println("\n"+message.getSender()+"\t对大家说:"+message.getContent()+"\t"+message.getSend_time());
                } else if (message.getMesType().equals(MessageType.MESSAGE_FILE_MES)) {
                    //文件消息
                    System.out.println("\n"+message.getSender()+" 给 "+message.getReceive()+" 发送文件: "+message.getSrc()+"到我的电脑的目录 "+message.getDest());
                    //取出文件字节数组,通过字节输出流将其写在目标磁盘上
                    FileOutputStream fileOutputStream = new FileOutputStream(message.getDest());
                    fileOutputStream.write(message.getFileBytes());
                    fileOutputStream.close();
                    System.out.println("\n文件保存成功~");

                } else{//wait
                    System.out.println("....");
                }

            } catch (Exception e) {
                throw new RuntimeException(e);
            }
        }
    }
}
